/**
在TypeScript中，泛型类是一种允许开发者在类定义时使用类型参数的特性。这使得类能够处理多种类型的数据，从而提高了代码的灵活性和可重用性。
  1. 泛型类的基本定义
  - 泛型类使用类型参数来定义类的属性和方法，使得类能够处理不同类型的数据。

    例如：
  class Box<T> {
      private value: T;

      constructor(value: T) {
          this.value = value;
      }

      getValue(): T {
          return this.value;
      }
  }

  const numberBox = new Box<number>(123); // 创建一个数字类型的 Box
  const stringBox = new Box<string>("Hello"); // 创建一个字符串类型的 Box
  2. 多个类型参数的泛型类
  - 泛型类可以接受多个类型参数，以支持更复杂的类型关系。

    例如：
  class Pair<K, V> {
      private key: K;
      private value: V;

      constructor(key: K, value: V) {
          this.key = key;
          this.value = value;
      }

      getKey(): K {
          return this.key;
      }

      getValue(): V {
          return this.value;
      }
  }

  const pair = new Pair<string, number>("age", 30);
  console.log(pair.getKey());   // 输出: "age"
  console.log(pair.getValue()); // 输出: 30
  3. 泛型约束
  - 可以对泛型类型参数进行约束，以限制其类型范围，确保类型安全。

    例如：
  interface Lengthwise {
      length: number;
  }

  class Container<T extends Lengthwise> {
      private item: T;

      constructor(item: T) {
          this.item = item;
      }

      getLength(): number {
          return this.item.length;
      }
  }

  const stringContainer = new Container("Hello");
  console.log(stringContainer.getLength()); // 输出: 5
  4. 使用默认类型
  - 可以为泛型参数指定默认类型，这样在不提供具体类型时会使用默认值。

    例如：
  class DefaultBox<T = string> {
      private value: T;

      constructor(value: T) {
          this.value = value;
      }

      getValue(): T {
          return this.value;
      }
  }

  const defaultBox = new DefaultBox(456); // 默认类型为 string，所以这里会推断为 string
  console.log(defaultBox.getValue()); // 输出: 456
  5. 总结
  泛型类是TypeScript中一种强大的特性，通过使用类型参数，开发者可以创建灵活且可重用的类。泛型类提高了代码的可维护性和类型安全性，适用于处理多种类型的数据结构和实现通用算法。在大型应用程序中，泛型类能够有效地组织和管理复杂的数据类型。
 */
class Point<Type = number> {
  x: Type;
  y: Type;
  constructor(x: Type, y: Type) {
    this.x = x;
    this.y = y;
  }
}

const p = new Point(1, 2);

export {}
